/**
 * 3. 无重复字符的最长子串
 */
class Solution2 {
    public int lengthOfLongestSubstring(String s) {
        int left = 0, right = 0, n = s.length(), ret = Integer.MIN_VALUE;
        char[] arr = s.toCharArray();
        int [] hash = new int[128];

        while(right < n) {
            if(hash[arr[right]] == 0) {
                // 进窗口
                hash[arr[right]]++;
                // 更新值
                ret = Math.max(ret, right - left + 1);
                right++;
            } else {
                // 出窗口
                hash[arr[left++]] -= 1;
            }
        }

        return ret == Integer.MIN_VALUE ? 0 : ret;
    }
}